//  https://leetcode-cn.com/problems/valid-parentheses
//  ValidParenthesis.swift
//  LeetCodeSwift
//
//  Created by XFB on 2019/7/30.
//  Copyright © 2019 XFB. All rights reserved.
//  有效的括号

import Foundation


class ValidParenthesis {
    
    /**
     给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串，判断字符串是否有效。
     有效字符串需满足：
     左括号必须用相同类型的右括号闭合。
     左括号必须以正确的顺序闭合。
     注意空字符串可被认为是有效字符串。
     
     示例 1:
     输入: "()"
     输出: true
     
     示例 2:
     输入: "()[]{}"
     输出: true
     
     示例 3:
     输入: "(]"
     输出: false
     
     示例 4:
     输入: "([)]"
     输出: false
     
     示例 5:
     输入: "{[]}"
     输出: true
     */
    

    func isValid(_ s: String) -> Bool {
    
        var stack = [Character]()
        
        for char in s {
            if char == "(" || char == "[" || char == "{" {
                stack.append(char)
            } else if char == ")" {
                guard stack.count != 0 && stack.removeLast() == "(" else {
                    return false
                }
            } else if char == "]" {
                guard stack.count != 0 && stack.removeLast() == "[" else {
                    return false
                }
            } else if char == "}" {
                guard stack.count != 0 && stack.removeLast() == "{" else {
                    return false
                }
            }
        }
        return stack.isEmpty
    }
}
